﻿using sipfe.model.dataAccess;
using sipfe.model.sqlExecutor;
using sipfe.util;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace sipfe.model.mante
{
    public class PoliticaDAO
    {

        private BDSIPFEEntities db = new BDSIPFEEntities();

        public String[] AddNuevaPoliticaDAO(SIPMaePolitica sipMaePolitica, string tipoPoli, string tipoMeta, string vDescrMedida, string valorMeta, string dFecMeta)
        {
            String error = "1";
            String rpta = "1";

            DateTime hoy = UtilitariosUtil.FechaHoy();
            sipMaePolitica.nAnio = UtilitariosUtil.yearNow();
            sipMaePolitica.nNumePoli = getNumeroPolitica(sipMaePolitica.nIdeTipoPoli);
            sipMaePolitica.nIdeTipoPoli = sipMaePolitica.nIdeTipoPoli;
            sipMaePolitica.dtFecReg = DateTime.Now;
            sipMaePolitica.dFecIniVig = hoy;
            sipMaePolitica.dFecAprob = sipMaePolitica.dFecAprob;
            sipMaePolitica.nSesion = sipMaePolitica.nSesion;
            sipMaePolitica.vFunciPoli = sipMaePolitica.vFunciPoli;
            sipMaePolitica.nIdeTipoPoliAso = sipMaePolitica.nIdeTipoPoliAso;
            sipMaePolitica.nPoliAso = sipMaePolitica.nPoliAso;
            sipMaePolitica.vSumiPoli = sipMaePolitica.vSumiPoli;
            sipMaePolitica.vDescrPoli = sipMaePolitica.vDescrPoli;
            sipMaePolitica.nIdeUsuReg = sipMaePolitica.nIdeUsuReg;

            List<SIPDetPolitica> listaVinculo = new List<SIPDetPolitica>();



            if (!string.IsNullOrEmpty(tipoPoli))
            {
                string[] arrayVinculos = tipoPoli.Split(',');
                string[] arrayTipoVinculos = tipoMeta.Split(',');
                string[] arrayTipovDescrMedida = vDescrMedida.Split(',');
                string[] arrayTipovalorMeta = valorMeta.Split(',');
                string[] arrayTipodFecMeta = dFecMeta.Split(',');

                for (int i = 0; i < arrayVinculos.Length; i++)
                {
                    SIPDetPolitica vp = new SIPDetPolitica();
                    vp.nIdePoli = sipMaePolitica.nIdePoli;
                    vp.nIdeMedida = Convert.ToInt32(arrayVinculos[i]);
                    vp.nIdeMeta = Convert.ToInt32(arrayTipoVinculos[i]);
                    vp.dFecIniVig = DateTime.Now;
                    vp.dtFecReg = DateTime.Now;
                    //
                    vp.vDescrMedida = arrayTipovDescrMedida[i];
                    vp.valorMeta = Convert.ToInt32(arrayTipovalorMeta[i]);
                    vp.dFecMeta = Convert.ToDateTime(arrayTipodFecMeta[i]);
                    //
                    //vp.vDescrMedida = sipMaePolitica.vDescrMedida;
                    //vp.valorMeta = sipMaePolitica.valorMeta;
                    //vp.dFecMeta = Convert.ToDateTime(sipMaePolitica.dFecMeta);
                    vp.nIdeUsuReg = sipMaePolitica.nIdeUsuReg;

                    sipMaePolitica.SIPDetPolitica.Add(vp);
                }

            }


            db.SIPMaePolitica.Add(sipMaePolitica);
            db.SaveChanges();

            return new String[] { sipMaePolitica.nIdeTipoPoli.ToString() };

        }


        public SIPMaePolitica findSIPMaePoliticaByIdDAO(decimal nIdePoli)
        {
            return db.SIPMaePolitica.Where(x => x.nIdePoli == nIdePoli).FirstOrDefault();
        }


        private decimal getNumeroPolitica(decimal? clase)
        {
            decimal annioNow = UtilitariosUtil.yearNow();
            StringBuilder sql = new StringBuilder();
            sql.Append("select isnull(MAX(nNumePoli),0) + 1 from SIPMaePolitica where nAnio=").Append(annioNow).Append(" and nIdeTipoPoli=").Append(clase);

            var max = db.Database.SqlQuery<Decimal>(sql.ToString());
            List<Decimal> valores = max.ToList<Decimal>();
            Decimal secuencia = valores.First<Decimal>();
            return secuencia;
        }

        public IList<dynamic> ListarPoliticaDAO(string fec_IniVig, string fec_FinVig, string ide_TipoPoli)
        {
            String[] parametros = new String[] { fec_IniVig, fec_FinVig, ide_TipoPoli };
            String[] nombreParametros = new String[] { "fec_IniVig", "fec_FinVig", "ide_TipoPoli" };
            IList<dynamic> lista = SqlExecutorSP.executeStore("paListarSIPPolitica", parametros, nombreParametros);
            return lista;
        }


        public IList<dynamic> ListadoSolicitudesDAO(int nIdeConvo)
        {
            String[] parametros = new String[] { nIdeConvo.ToString() };
            String[] nombreParametros = new String[] { "nIdeConvo" };
            IList<dynamic> lista = SqlExecutorSP.executeStore("paSolicitantePorConvocatoria", parametros, nombreParametros);
            return lista;
        }




    }
}
